// /**
//  * 优化的移动逻辑系统
//  * 
//  * 结合空间分区和批量处理，提升性能
//  * 
//  * 优化点：
//  * 1. 批量处理：缓存组件数组，减少函数调用
//  * 2. 空间分区：为碰撞检测等系统提供快速查询
//  * 
//  * @author AI Assistant
//  * @date 2025-11-26
//  */

// import { ecs } from "../../../core/ecs/ECS";
// import { InterpolatedTransform } from "../component/InterpolatedTransform";
// import { VelocityComponent } from "./MovementLogicSystem";
// import { SpatialGrid } from "./SpatialGrid";

// /**
//  * 优化的移动逻辑系统
//  */
// @ecs.register('OptimizedMovementLogic')
// export class OptimizedMovementLogicSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate {
//     // ========== 空间分区 ==========
//     private spatialGrid: SpatialGrid;
//     private cellSize: number = 200; // 网格大小，根据游戏调整
    
//     // ========== 批量处理 ==========
//     private transforms: InterpolatedTransform[] = [];
//     private velocities: VelocityComponent[] = [];
//     private entitiesArray: ecs.Entity[] = []; // 实体数组，与 transforms/velocities 对应
//     private cacheValid: boolean = false;
    
//     filter(): ecs.IMatcher {
//         return ecs.allOf(InterpolatedTransform, VelocityComponent);
//     }
    
//     init(): void {
//         console.log('[OptimizedMovementLogicSystem] ✅ 优化的移动系统初始化');
//         this.spatialGrid = new SpatialGrid(this.cellSize);
//         this.updateCache();
//     }
    
//     /**
//      * 更新缓存（实体变化时调用）
//      */
//     private updateCache(): void {
//         this.transforms = [];
//         this.velocities = [];
//         this.entitiesArray = [];
        
//         for (const entity of this.entities) {
//             const transform = entity.get(InterpolatedTransform);
//             const velocity = entity.get(VelocityComponent);
            
//             if (transform && velocity) {
//                 this.transforms.push(transform);
//                 this.velocities.push(velocity);
//                 this.entitiesArray.push(entity);
//             }
//         }
        
//         this.cacheValid = true;
//     }
    
//     /**
//      * 固定更新（dt 始终是 0.05 秒）
//      */
//     update(dt: number): void {
//         // 如果实体数量变化，更新缓存
//         if (!this.cacheValid || this.transforms.length !== this.entities.length) {
//             this.updateCache();
//         }
        
//         // ⭐ 批量更新位置（无函数调用开销）
//         const count = this.transforms.length;
        
//         for (let i = 0; i < count; i++) {
//             const transform = this.transforms[i];
//             const velocity = this.velocities[i];
            
//             // 保存旧位置（用于空间网格更新）
//             const oldX = transform.position.x;
//             const oldY = transform.position.y;
            
//             // 计算新位置
//             const newX = oldX + velocity.x * dt;
//             const newY = oldY + velocity.y * dt;
            
//             // 更新位置
//             transform.setPosition(newX, newY);
            
//             // ⭐ 更新空间网格（用于碰撞检测等）
//             this.spatialGrid.updateEntity(
//                 this.entitiesArray[i],
//                 oldX,
//                 oldY,
//                 newX,
//                 newY
//             );
//         }
//     }
    
//     /**
//      * 获取附近实体（使用空间分区）
//      * 供其他系统使用，如碰撞检测、AI 等
//      */
//     getNearbyEntities(x: number, y: number, radius: number): ecs.Entity[] {
//         return this.spatialGrid.getEntitiesInArea(x, y, radius);
//     }
    
//     /**
//      * 获取空间网格（供其他系统使用）
//      */
//     getSpatialGrid(): SpatialGrid {
//         return this.spatialGrid;
//     }
    
//     /**
//      * 设置网格大小
//      */
//     setCellSize(cellSize: number): void {
//         this.cellSize = cellSize;
//         this.spatialGrid = new SpatialGrid(cellSize);
//         this.cacheValid = false; // 需要重建网格
//     }
    
//     onDestroy(): void {
//         this.spatialGrid.clear();
//         this.transforms = [];
//         this.velocities = [];
//         this.entitiesArray = [];
//         this.cacheValid = false;
//     }
// }

// /**
//  * 导出系统实例
//  */
// // export const optimizedMovementLogicSystem = new OptimizedMovementLogicSystem();

